package com.easyj.admin.activiti.el;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.easyj.admin.db.model.Department;
import com.easyj.admin.db.model.User;
import com.easyj.admin.sys.service.DepartmentService;
import com.easyj.admin.sys.service.RoleService;
import com.easyj.base.exception.TransactionalException;
import com.easyj.base.security.service.SecurityUtil;

/**
 * 角色用户 EL表达式，根据角色和其它条件，查找用户，
 * ‘单数’只返回一个用户，复数（s）可返回多个用户
 * @author hjf
 *
 */
@Component("roleUserEl")
public class RoleUserEl {
	private static final String   deptLeader="dept-leader";//部门主管角色代码,系统预定义
	
	@Autowired
	private  RoleService roleService;
	
	@Autowired
	private  DepartmentService departmentService;
	
   /**
    * 返加部门主管ID,如查部门有多个此角色用户，则返加其中一个 
    * ${roleUserEl.deptLeader} 动态属性	
    * @return
    */
   public String getDeptLeader() {
	  // System.out.println("getDeptLeader.....");
	   User find=null;
	   Long deptId=SecurityUtil.getOperator().getDepartmentId();
	   //部门主管 有部门主管角色用户
	   List<User> users=roleService.findUsersByRoleCode(deptLeader);
	   if(users!=null) {
		   for(User u: users) {
			   if(u.getDepartmentId()==deptId) {
				   find=u;
				   break;
			   }
		   }
	   }
	   if(find!=null) {
		   return find.getId().toString();
	   }else { //查找上一级的主管，可能有次级小部门没有主管
		   Department dept = departmentService.findById(deptId);
		   Long pid=dept.getParentId();
		   for(User u: users) {
			   if(u.getDepartmentId()==pid) {
				   find=u;
				   break;
			   }
		   }
		   if(find!=null) {
			   return find.getId().toString();
		   }else { //没找到则抛错误终止任务
			   throw new TransactionalException("没有找到相关用户--部门主管");
		   }
	   }
	   
	 
   }
   
   /**
	 * 根据角色代码，返回角色成员id 集合
	 * @param code
	 * @return
	 */
	public List<String> findRoleUsers(String code){
		ArrayList<String> rtn=new ArrayList<String>();
		List<User> list=roleService.findUsersByRoleCode(code);
		for(User u:list) {
			rtn.add(u.getId().toString());
		}
		return rtn;
		
	}
}
